home *** CD-ROM | disk | FTP | other *** search
/ The Utilities Experience / The Utilities Experience - Volume 1.iso / software / graphics / n-z / visage / install visage next >
Text File  |  1995-12-21  |  17KB  |  719 lines

  1. ;
  2. ; Installer script for Visage.
  3. ;
  4. ; $VER: Install_Visage 39.1 (7.9.95)
  5. ;
  6.  
  7. ; Get current language (no need for lots of silly icons! ;). However, this
  8. ; won't properly work for all versions of Installer. Some doesn't understand
  9. ; the tooltype "LANGUAGE=default". :/
  10.  
  11. (if (= (exists "Env:Language") 1)
  12.     ; GetEnv reports "String too long" if the variable doesn't exist! :(
  13.     (set @language (getenv "language"))
  14. )
  15.  
  16. ;**************************************************************************
  17. ; English strings
  18.  
  19. (set default-lang 1)
  20.  
  21. (set #bad-kick
  22.     "You must have AmigaOS Release 3.0 or newer to use Visage."
  23. )
  24.  
  25. (set #welcome
  26.     (cat
  27.         "\n\n\nWelcome to the Visage installation utility.\n\n"
  28.         "This program lets you install Visage on your Amiga.\n\n\n"
  29.         "Visage © 1995  Magnus Holmgren."
  30.     )
  31. )
  32.  
  33. (set #install-parts "Please select the parts you wish to install")
  34.  
  35. (set #item-visage "Visage")
  36.  
  37. (set #item-visage-guide "Visage.guide")
  38.  
  39. (set #item-locale "Translations")
  40.  
  41. (set #item-codec "JPEG codec")
  42.  
  43. (set #item-getmodeid "GetModeID")
  44.  
  45. (set #item-kill "Kill")
  46.  
  47. (set #item-unpackilbm "UnpackILBM")
  48.  
  49. (set #install-parts-help
  50.     (cat
  51.         "    Here you select the different parts of Visage that you would like to "
  52.         "install. After that, you select the details of the installation (such as "
  53.         "where the different files should be installed). You may choose to install "
  54.         "the following items:\n"
  55.         "    Visage: The actual picture viewer.\n"
  56.         "    Visage.guide: The manual, in AmigaGuide® format. If you install it "
  57.         "using the installer, the text will reflow to fit the current window size. "
  58.         "If you do a manual installation, the text is fixed to 76 columns.\n"
  59.         "    Translations: If you install a translation, then Visage can operate in "
  60.         "the language(s) you select.\n"
  61.         "    JPEG codec: The Tower JPEG Codec Class, which Visage needs to be able "
  62.         "to view JPEG pictures (without using datatypes).\n"
  63.         "    GetModeID: A program that shows a screen mode requester, and prints "
  64.         "a decimal number that represents the selected screen mode.\n"
  65.         "    Kill: A program that can stop another program (sending \"break\" "
  66.         "signals). Similar to Break.\n"
  67.         "    UnpackILBM: A program that unpacks the picture data in an IFF ILBM "
  68.         "picture (the BODY chunk).\n"
  69.         "    For more information about these parts, please read the manual.\n"
  70.     )
  71. )
  72.  
  73. (set #where-visage "Where would you like to install Visage?")
  74.  
  75. (set #where-visage-guide "Where would you like to install Visage.guide?")
  76.  
  77. (set #copy-guide-icon "Should I copy the icon for Visage.guide?")
  78.  
  79. (set #convert-guide "Converting Visage.guide...")
  80.  
  81. (set #which-language "Which languages should be installed?")
  82.  
  83. (set #which-language-help
  84.     (cat
  85.         "    The Amiga can be operated in many different languages. If you "
  86.         "want Visage to use the same language as your Amiga Workbench, "
  87.         "then a couple of catalog files must be copied to your harddisk "
  88.         "for each language supported.\n"
  89.         "    To reduce the amount of space consumed by the language files, "
  90.         "you can select to have only the files of specific languages "
  91.         "copied.\n"
  92.         "    Simply check the boxes of the languages you wish to have have "
  93.         "available on your system.\n"
  94.     )
  95. )
  96.  
  97. (set #where-tools "Where would you like to install the extra programs?")
  98.  
  99. (set #where-tools-help
  100.     (cat
  101.         "    Here you specify where the programs GetModeID, Kill and UnpackILBM "
  102.         "will be installed. Only the programs you selected will be copied. Since "
  103.         "these programs are Shell-only, the default location is C:, where the "
  104.         "systems Shell-only programs can be found.\n"
  105.         "    It is recommended that you install these programs somewhere in "
  106.         "your command search path.\n"
  107.     )
  108. )
  109.  
  110. (set #copy "Copying %s to %s...")
  111.  
  112. (set #program-update "How do you want to update the tooltypes in the icon?")
  113.  
  114. (set #update-none "No update")
  115.  
  116. (set #update-all "Add all")
  117.  
  118. (set #update-39-0 "Add new since 39.0")
  119.  
  120. (set #program-update-help
  121.     (cat
  122.         "    Since this installation updated an older version of Visage, "
  123.         "the icon have not been copied over. This to maintain any changes "
  124.         "you may have made to it. However, new tooltypes may have been added. "
  125.         "Here you can decide if you want to:\n"
  126.         "    No update: Skip this part.\n"
  127.         "    Add all tooltypes: existing tooltypes will not be changed "
  128.         "Any tooltypes you may have removed will be added again. The new "
  129.         "tooltypes will be added as well.\n "
  130.         "    Add new since 39.0: Only add the new tooltypes.\n"
  131.     )
  132. )
  133.  
  134. ; JPEG codec
  135.  
  136. (set #codec-message
  137.     (cat
  138.         "\n\n\nTower JPEG Codec Class\n\nCopyright © 1994 Christoph Feck, TowerSystems\n"
  139.         "All Rights Reserved.\n\n\n\n"
  140.         "Please refer to the documentation for details."
  141.     )
  142. )
  143.  
  144. (set #jpeg-tmp-prompt
  145.     "Select a directory for temporary files, not in RAM:"
  146. )
  147.  
  148. (set #temp-file
  149.     (cat
  150.         "    To decode certain JPEG images, the Codec needs a large amount of memory.\n"
  151.         "If the required storage is not available in main memory, the Codec will "
  152.         "create a temporary file on your harddisk. The volume on which this file is "
  153.         "created should have enough free space (about 4 meg).\n"
  154.         "    A temporary file is usually only required, if you want to quantize "
  155.         "JPEG images to 256 colors.\n\n"
  156.         @askdir-help
  157.     )
  158. )
  159.  
  160. (set #jpeg-startup-prompt
  161.     "An assignment has to be added to your user-startup."
  162. )
  163.  
  164. (set #make-assign
  165.     (cat
  166.         "    The logical assignment \"JPEGTMP:\" is used to refer to the temporary "
  167.         "directory.\n"
  168.         "    In order to make this assignment available on every reboot, an "
  169.         "\"Assign\" command has to be added to your \"user-startup\" file.\n\n"
  170.         @startup-help
  171.     )
  172. )
  173.  
  174. (set #jpeg-copy "Copying %s...")
  175.  
  176.  
  177. ;**************************************************************************
  178. ; Swedish strings
  179.  
  180. (if (= @language "svenska")
  181.     (
  182.         (set default-lang 4)
  183.  
  184.         (set #bad-kick
  185.             "Du måste ha AmigaOS version 3 eller nyare för att kunna använda Visage."
  186.         )
  187.  
  188.         (set #welcome
  189.             (cat
  190.                 "\n\n\nVälkommen till Installeraren.\n\n"
  191.                 "Det här programmet låter dig installera Visage i din Amiga.\n\n\n"
  192.                 "Visage © 1995  Magnus Holmgren."
  193.             )
  194.         )
  195.  
  196.         (set #install-parts "Välj de delar som du vill installera:")
  197.  
  198.         (set #item-visage "Visage")
  199.  
  200.         (set #item-visage-guide "Visage.guide")
  201.  
  202.         (set #item-locale "Översättningar")
  203.  
  204.         (set #item-codec "JPEG codec")
  205.  
  206.         (set #install-parts-help
  207.             (cat
  208.                 "  Här väljer du de olika delar av Visage som du vill installera. "
  209.                 "Efter det anger du detaljer om installationen (såsom var de olika "
  210.                 "filerna ska installeras). Du kan välja mellan följande delar:\n"
  211.                 "  Visage: Själva bildvisaren.\n"
  212.                 "  Visage.guide: Manualen, i AmigaGuide®-format. Om du installerar "
  213.                 "den med Installeraren, så kommer texten att formateras om efter "
  214.                 "fönstrets aktuella storlek. Om du installerar den manuellt, så "
  215.                 "är texten fixerad vid 76 kolumner.\n"
  216.                 "  Översättningar: Om du installerar en översättning, så kan "
  217.                 "Visage använda det språket.\n"
  218.                 "  JPEG codec: \"The Tower JPEG Codec Class\". Visage behöver "
  219.                 "den här för att kunna visa JPEG-bilder.\n"
  220.                 "  GetModeID: Ett program som visar en skärmlägesväljare, och "
  221.                 "sedan skriver ut ett decimalt tal som motsvarar det valda "
  222.                 "skärmläget.\n"
  223.                 "  Kill: Ett program som kan stoppa andra program (genom att "
  224.                 "skicka \"break\"-signaler). Liknar Break.\n"
  225.                 "  UnpackILBM: Ett program som packar upp bilddatan i en IFF ILBM "
  226.                 "bild (BODY \"chunken\").\n"
  227.                 "    För mer information om de här sakerna, se manualen.\n"
  228.             )
  229.         )
  230.  
  231.         (set #where-visage "Var vill du installera Visage?")
  232.  
  233.         (set #where-visage-guide "Var vill du installera Visage.guide?")
  234.  
  235.         (set #copy-guide-icon "Ska jag kopiera ikonen för Visage.guide?")
  236.  
  237.         (set #convert-guide "Konverterar Visage.guide...")
  238.  
  239.         (set #which-language "Vilka språk ska installeras?")
  240.  
  241.         (set #which-language-help
  242.             (cat
  243.                 "  Amigan kan arbeta med flera olika språk. Om du vill att "
  244.                 "Visage ska använda samma språk som Amiga Workbench så "
  245.                 "måste en så kallad katalogfil kopieras till din systemdisk "
  246.                 "för varje språk.\n"
  247.                 "  För att minimera diskutrymmet för språkfiler kan du välja "
  248.                 "att bara installera filerna för vissa språk.\n"
  249.                 "  Markera bara rutorna för de språk du önskar installera i "
  250.                 "din dator.\n"
  251.             )
  252.         )
  253.  
  254.         (set #where-tools "Var vill du installera de extra programmen?")
  255.  
  256.         (set #where-tools-help
  257.             (cat
  258.                 "  Här anger du var programmen GetModeID, Kill och UnpackILBM "
  259.                 "ska installeras någonstans. Bara de program som du valde "
  260.                 "tidigare kommer att kopieras. Eftersom de här programmen bara "
  261.                 "kan användas från ett skal, så är den förvalda destinationen C:, "
  262.                 "eftersom systemets \"skalprogram\" finns där. Det rekommenderas "
  263.                 "att du installerar dessa program någonstans i sökvägen för "
  264.                 "kommandon.\n"
  265.             )
  266.         )
  267.  
  268.         (set #copy "Kopierar %s till %s...")
  269.  
  270.         (set #program-update "Hur vill du uppdatera verktygstyperna i symbolen?")
  271.  
  272.         (set #update-none "Uppdatera inte")
  273.  
  274.         (set #update-all "Lägg till alla")
  275.  
  276.         (set #update-39-0 "Lägg till nya sedan 39.0")
  277.  
  278.         (set #program-update-help
  279.             (cat
  280.                 "  Eftersom den här installationen uppdaterade än gammal version "
  281.                 "av Visage, så har symbolen inte kopierats. Detta för att bibehålla "
  282.                 "eventuella ändringar som du kan ha gjort. Men nya verktygstyper kan "
  283.                 "ha tillkommit. Här kan du avgöra vad du vill göra:\n"
  284.                 "  Uppdatera inte: Hoppa över detta.\n"
  285.                 "  Lägg till alla: Lägg till alla verktygstyper. Existerande "
  286.                 "verktygstyper kommer inte att ändras.\n"
  287.                 "  Lägg till nya sedan 39.0: Lägg bara till de nya "
  288.                 "verktytstypernan.\n"
  289.             )
  290.         )
  291.  
  292.         ; JPEG codec
  293.  
  294.         (set #temp-file
  295.             (cat
  296.                 "  För att packa upp vissa JPEG-bilder, så behöver "
  297.                 "Codec:en mycket minne.\n"
  298.                 "  Om det inte finns nog med plats i huvudminnet, så kommer "
  299.                 "Codec:en att skapa en temporärfil på din hårddisk. Volymen "
  300.                 "på vilken den här filen skapas bör ha tillräcklikt med fritt "
  301.                 "utrymme (ungefär 4 MB).\n"
  302.                 "  En temporärfil behövs normalt sett bara om du vill "
  303.                 "kvantisera JPEG-bilder till 256 färger.\n\n"
  304.                 @askdir-help
  305.             )
  306.         )
  307.  
  308.         (set #make-assign
  309.             (cat
  310.                 "  Den logiska tilldelningen \"JPEGTMP:\" används för att "
  311.                 "referera till lådan för temporära filer.\n"
  312.                 "  För att göra den här tilldelningen tillgänglig vid varje "
  313.                 "systemstart så behöver ett \"Assign\"-kommando läggas till "
  314.                 "i din \"user-startup\"-fil.\n\n"
  315.                 @startup-help
  316.             )
  317.         )
  318.  
  319.         (set #codec-message
  320.             (cat
  321.                 "\n\n\nTower JPEG Codec Class\n\n"
  322.                 "Upphovsrätt © 1994 Christoph Feck, TowerSystems\n"
  323.                 "Alla rättigheter reserverade.\n\n\n\n"
  324.                 "Var god läs dokumentationen för detaljer."
  325.             )
  326.         )
  327.  
  328.         (set #jpeg-tmp-prompt
  329.             "Välj en låda för temporära filer, inte i RAM:"
  330.         )
  331.  
  332.         (set #jpeg-startup-prompt
  333.             "En tilldelning måste läggas till i din user-startup."
  334.         )
  335.  
  336.         (set #jpeg-copy "Kopierar %s...")
  337.     )
  338. )
  339.  
  340.  
  341. ;**************************************************************************
  342. ; The actual installaion script
  343.  
  344. ; Set to true if we did an update (old Visage.info found)
  345. (set update 0)
  346.  
  347. ; Since files can be scatter installed, don't mention any specific location..
  348. (set @default-dest "")
  349.  
  350. ; Version of old program. This means no old program.
  351. (set visagever 0)
  352. (set visagerev 0)
  353.  
  354. ; Check Kickstart version. Exit if not at least 3.0
  355. (if (< (/ (getversion) 65536) 39)
  356.         (abort #bad-kick)
  357. )
  358.  
  359. ; Greetings Mr. Falken...
  360. (message #welcome)
  361.  
  362. (welcome)
  363.  
  364. ; Ask the user what to install
  365. (set install-files
  366.     (askoptions
  367.         (prompt    #install-parts)
  368.         (help    #install-parts-help "\n" @askoptions-help)
  369.         (choices
  370.             #item-visage
  371.             #item-visage-guide
  372.             #item-locale
  373.             #item-codec
  374.             #item-getmodeid
  375.             #item-kill
  376.             #item-unpackilbm
  377.         )
  378.         (default (if (= @user-level 2) 127 15))
  379.     )
  380. )
  381.  
  382. ; Ask the user for the location of all parts
  383. (if (BITAND install-files 1)
  384.     (set visage-dest
  385.         (askdir
  386.             (prompt  #where-visage)
  387.             (help    @askdir-help)
  388.             (default "Sys:Utilities")
  389.         )
  390.     )
  391. )
  392.  
  393. (if (BITAND install-files 2)
  394.     (
  395.         (set guide-dest visage-dest)
  396.  
  397.         (if (exists "Help:")
  398.             (set guide-dest "Help:")
  399.         )
  400.  
  401.         (set guide-dest
  402.             (askdir
  403.                 (prompt  #where-visage-guide)
  404.                 (help    @askdir-help)
  405.                 (default guide-dest)
  406.             )
  407.         )
  408.  
  409.         (set dest-guide-name (tackon guide-dest "Visage.guide.info"))
  410.  
  411.         (set copy-guide-icon
  412.             (if (AND (= @user-level 2 ) (= (exists dest-guide-name) 0))
  413.                 (askbool (prompt #copy-guide-icon))
  414.                 1
  415.             )
  416.         )
  417.     )
  418. )
  419.  
  420. (set languages 0)
  421.  
  422. (if (BITAND install-files 4)
  423.     (set lang
  424.         (askoptions
  425.             (prompt    #which-language)
  426.             (help    #which-language-help "\n" @askoptions-help)
  427.             (choices
  428.                 "English"
  429.                 "Norsk"
  430.                 "Svenska"
  431.             )
  432.             (default default-lang)
  433.         )
  434.     )
  435. )
  436.  
  437. (if (BITAND install-files 112)    ; 16 + 32 + 64
  438.     (set tool-dest
  439.         (askdir
  440.             (prompt    #where-tools)
  441.             (help    #where-tools-help "\n" @askdir-help)
  442.             (default "C:")
  443.         )
  444.     )
  445. )
  446.  
  447. ; And now do the actual installation
  448.  
  449. (complete 0)
  450.  
  451. (if (BITAND install-files 1)
  452.     (
  453.         ; Get the version of previously installed Visage
  454.         (if (= (exists (tackon visage-dest "Visage")) 1)
  455.             (
  456.                 (set vernum (getversion (tackon visage-dest "Visage")))
  457.                 (set visagever (/ vernum 65536))
  458.                 (set visagerev (- vernum (* visagever 65536)))
  459.  
  460.                 (if (<= visagever 38)
  461.                     (
  462.                         (set visagever 39)
  463.                         (set visagerev 0)
  464.                     )
  465.                 )
  466.             )
  467.         )
  468.  
  469.         (copylib
  470.             (prompt    (#copy "Visage" visage-dest))
  471.             (source    "Visage")
  472.             (dest    visage-dest)
  473.         )
  474.  
  475.         (if (= (exists (tackon visage-dest "Visage.info")) 0)
  476.             (copyfiles
  477.                 (source    "Visage.info")
  478.                 (dest    visage-dest)
  479.             )
  480.             (set update 1)
  481.         )
  482.     )
  483. )
  484.  
  485. (complete 20)
  486.  
  487. (if (BITAND install-files 2)
  488.     (
  489.         (working #convert-guide)
  490.  
  491.         (run "C/FixAG Visage.guide T:Visage.Guide")
  492.  
  493.         (copylib
  494.             (prompt (#copy "Visage.guide" guide-dest))
  495.             (source "T:Visage.guide")
  496.             (dest   guide-dest)
  497.         )
  498.  
  499.         (delete "T:Visage.guide" (safe))
  500.  
  501.         (if copy-guide-icon
  502.             (copyfiles
  503.                 (source "Visage.guide.info")
  504.                 (dest   guide-dest)
  505.             )
  506.         )
  507.     )
  508. )
  509.  
  510. (complete 40)
  511.  
  512. (if (BITAND install-files 4)
  513.     (
  514.         (set n 0)
  515.  
  516.         (while
  517.             (set language
  518.                 (select n
  519.                     "English"
  520.                     "Norsk"
  521.                     "Svenska"
  522.                     ""
  523.                 )
  524.             )
  525.  
  526.             (
  527.                 (if (AND (IN lang n) (<> 0 n))
  528.                     (
  529.                         (set catalog
  530.                             (tackon "Catalogs"
  531.                                 (tackon language "visage.catalog")
  532.                             )
  533.                         )
  534.                         (set destination (tackon "Locale:Catalogs" language))
  535.  
  536.                         (copylib
  537.                             (prompt (#copy catalog destination))
  538.                             (source catalog)
  539.                             (dest   destination)
  540.                         )
  541.                     )
  542.                 )
  543.  
  544.                 (set n (+ n 1))
  545.             )
  546.         )
  547.     )
  548. )
  549.  
  550. (complete 45)
  551.  
  552. (if (BITAND install-files 16)
  553.     (copylib
  554.         (prompt (#copy "GetModeID" tool-dest))
  555.         (source "C/GetModeID")
  556.         (dest   tool-dest)
  557.     )
  558. )
  559.  
  560. (if (BITAND install-files 32)
  561.     (copylib
  562.         (prompt (#copy "Kill" tool-dest))
  563.         (source "C/Kill")
  564.         (dest   tool-dest)
  565.     )
  566. )
  567.  
  568. (if (BITAND install-files 64)
  569.     (copylib
  570.         (prompt (#copy "UnpackILBM" tool-dest))
  571.         (source "C/UnpackILBM")
  572.         (dest   tool-dest)
  573.     )
  574. )
  575.  
  576. (complete 50)
  577.  
  578. ; JPEG codec installation
  579.  
  580. (if (BITAND install-files 8)
  581.     (
  582.         ;****************************************************************************
  583.         ;
  584.         ; Setup
  585.         ;
  586.  
  587.         (set libs-dest "LIBS:")
  588.         (set class-dest "SYS:Classes")
  589.  
  590.         (if (not (exists class-dest))
  591.             (set class-dest "LIBS:")
  592.         )
  593.  
  594.         ;****************************************************************************
  595.         ;
  596.         ; Welcome
  597.         ;
  598.  
  599.         (message #codec-message)
  600.  
  601.         ;****************************************************************************
  602.         ;
  603.         ; JPEGTMP: assignment
  604.         ;
  605.  
  606.         (set has-temp 0)
  607.  
  608.         (if (exists "JPEGTMP:" (noreq))
  609.             (
  610.                 (set has-temp 1)
  611.                 (if (= "RAM" (getdevice "JPEGTMP:"))
  612.                     (set has-temp 0)
  613.                 )
  614.             )
  615.         )
  616.  
  617.         (if (= has-temp 0)
  618.             (
  619.                 (set jpeg-tmp (askdir (help #temp-file) (prompt #jpeg-tmp-prompt) (default "SYS:")))
  620.                 (startup "JPEG Codec"
  621.                     (help #make-assign)
  622.                     (prompt #jpeg-startup-prompt)
  623.                     (command "Assign JPEGTMP: \"" jpeg-tmp "\"")
  624.                 )
  625.                 (makeassign "JPEGTMP" jpeg-tmp)
  626.             )
  627.         )
  628.  
  629.         (complete 60)
  630.  
  631.         ;****************************************************************************
  632.         ;
  633.         ; Install libraries and classes
  634.         ;
  635.  
  636.         (copylib
  637.             (help @copylib-help)
  638.             (prompt (#jpeg-copy "tower.library"))
  639.             (source "Libs/tower.library")
  640.             (dest libs-dest)
  641.             (confirm)
  642.         )
  643.  
  644.         (complete 70)
  645.  
  646.         (copylib
  647.             (help @copylib-help)
  648.             (prompt (#jpeg-copy "codec.class"))
  649.             (source "Classes/codec.class")
  650.             (dest class-dest)
  651.             (confirm)
  652.         )
  653.  
  654.         (complete 80)
  655.  
  656.         (copylib
  657.             (help @copylib-help)
  658.             (prompt (#jpeg-copy "picture.codec"))
  659.             (source "Classes/Codecs/picture.codec")
  660.             (dest (tackon class-dest "Codecs"))
  661.             (confirm)
  662.         )
  663.  
  664.         (complete 90)
  665.  
  666.         (copylib
  667.             (help @copylib-help)
  668.             (prompt (#jpeg-copy "jpeg.codec"))
  669.             (source "Classes/Codecs/jpeg.codec")
  670.             (dest (tackon class-dest "Codecs"))
  671.             (confirm)
  672.         )
  673.  
  674.         ;****************************************************************************
  675.         ;
  676.         ; Exit
  677.         ;
  678.  
  679.         (run "Avail >NIL: FLUSH")
  680.     )
  681. )
  682.  
  683. (if update
  684.     (
  685.         (complete 95)
  686.         (set defaction 0)
  687.  
  688.         ; We don't really need version checking yet, but...
  689.         (if (AND (= visagever 39) (= visagerev 0))
  690.             (set defaction 2)
  691.         )
  692.  
  693.         (set action
  694.             (askchoice
  695.                 (prompt        #program-update)
  696.                 (choices    #update-none
  697.                         #update-all
  698.                         #update-39-0
  699.                 )
  700.                 (default    defaction)
  701.                 (help        #program-update-help "\n" @askchoice-help)
  702.             )
  703.         )
  704.  
  705.         (if (>= action 1)
  706.             (run
  707.                 ("C/DoIconLite Visage.info TO %s UPTT SEARCHTT %s"
  708.                     (tackon visage-dest "Visage.info")
  709.                     (select action "" "#?" "#?DITHER#?")
  710.                 )
  711.             )
  712.         )
  713.     )
  714. )
  715.  
  716. (complete 100)
  717.  
  718. (exit)
  719.